;
(function($) {
    $.fn.app_widget_drag= function(options) {
        var options=$.extend({
            moveEle:null,
            lockX:false,
            lockY:false,
            lockAll:false,
            Limit:          false,//是否设置范围限制(为true时下面参数有用,可以是负数)
            mxLeft:         0,//左边限制
            mxRight:        9999,//右边限制
            mxTop:          0,//上边限制
            mxBottom:       9999,//下边限制
            mxContainer:    "body",//指定限制在容器内
            Transparent:    false,//是否透明
            isViewPort:false,
            onStart: function() {
            },//开始移动时执行
            onMove: function() {
            },//移动时执行
            onStop: function() {
            }//结束移动时执行
        },options|| {});
        return this.each( function() {
            if($(options.moveEle)==$(this)) {
                var $_move=$(this).filter(options.moveEle);
            } else {
                var $_move=$(this).find(options.moveEle);
            }
            var $_drag=$(this);
            var $_containor=$(options.mxContainer);
            $_drag.css("position","absolute");
            $_move.css("cursor","move");
            var _drag= {};
            //记录鼠标相对拖放对象的坐标：
            _drag._x=0;
            _drag._y=0;
            //取得鼠标相对拖放对象的坐标：
            var _Start= function(e) {
                _drag._x=e.pageX-$_drag.offset().left;
                _drag._y=e.pageY-$_drag.offset().top;
                $(document).bind("mousemove", function(e) {
                    _Move(e);
                });
                $(document).bind("mouseup", function(e) {
                    _Stop(e);
                });
            };
            var _Stop= function() {
                $(document).unbind("mousemove");
                $(document).unbind("mouseup");
            }
            var _Move= function(e) {
                var iLeft=e.pageX-_drag._x;
                var iTop=e.pageY-_drag._y;
                if(options.lockAll) {
                    _Stop(e);
                    return false;
                }
                //设置范围限制
                if(options.Limit) {
                    var mxLeft=options.mxLeft,mxRight =options.mxRight, mxTop = options.mxTop, mxBottom = options.mxBottom;
                    //如果设置了容器，再修正范围参数
                    //是否为视口内
                    if(options.isViewPort) {

                    } else {
                        //指定的容器
                        mxLeft = Math.max(mxLeft, 0);
                        mxTop = Math.max(mxTop, 0);
                        mxRight = Math.min(mxRight, $_containor.outerWidth());
                        mxBottom = Math.min(mxBottom, $_containor.outerHeight());
                    }
                    //修正移动参数
                        iLeft = Math.max(Math.min(iLeft, mxRight - $_drag.outerWidth()), mxLeft);
                        iTop = Math.max(Math.min(iTop, mxBottom - $_drag.outerHeight()), mxTop);
                }
                window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
                if(!options.lockX) {
                    $_drag.css({
                        "left":iLeft
                    });
                }
                if(!options.lockY)
                    $_drag.css({
                        "top":iTop
                    });
            }
            $_move.bind("mousedown", function(e) {
                _Start(e);
            }).bind("mouseup", function() {
                _Stop();
            })
        });
    }
})(jQuery);